package com.shujia.spark.mllib

import org.apache.spark.ml.feature.LabeledPoint
import org.apache.spark.ml.linalg
import org.apache.spark.ml.linalg.Vectors

object Demo1DataType {
  def main(args: Array[String]): Unit = {

    /**
     * 稠密向量
     *
     */
    val dense: linalg.Vector = Vectors.dense(Array(0.1, 0, 0, 0, 0.4, 1.5, 0, 0, 0, 0, 20.1, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0))
    println(dense)

    /**
     * 稀疏向量: 只存储非0位置，如果0的位置很多，使用稀疏向量可以节省存储空间
     */
    val sparse: linalg.Vector = Vectors.sparse(21, Array(0, 4, 5, 10, 12), Array(0.1, 0.4, 1.5, 20.1, 10))

    println(sparse)

    /**
     * 相互转换
     */
    println(dense.toSparse)
    println(sparse.toDense)


    /**
     * 标记数据: 需要将原始的数据转换成LabeledPoint格式的数据，才能带入算法
     * 有目标值（y） 和特征向量（x）组成
     *
     */
    val point: LabeledPoint = LabeledPoint(1.0, Vectors.dense(1.0, 2.0, 3.0))
    println(point)


  }

}
